package org.web2024.cnofig;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.web2024.interceptor.SelectcourseCheckinterceptor;

@Configuration
@MapperScan("org.web2024.mapper")
public class WebMvcConfig implements WebMvcConfigurer{


    /**
 * 添加跨域资源共享（CORS）的映射配置
 * 该方法覆盖自WebMvcConfigurer接口，用于配置CORS策略以支持跨域请求
 *
 * @param registry CorsRegistry对象，用于注册CORS映射
 */
@Override
public void addCorsMappings(CorsRegistry registry) {
    // 调用父类方法以执行任何默认的CORS配置
    WebMvcConfigurer.super.addCorsMappings(registry);

    // 为所有路径添加CORS配置
    registry.addMapping("/**")
            // 允许所有域与当前应用进行跨域请求
            .allowedOriginPatterns("*")
            // 限定允许的跨域请求方法
            .allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS")
            // 允许跨域请求中携带用户凭证
            .allowCredentials(true)
            // 预检请求的缓存时间，单位为秒
            .maxAge(3600)
            // 明确允许特定的源进行跨域请求
            .allowedOrigins("http://localhost:8086")
            // 允许所有头部跨域请求
            .allowedHeaders("*");
}

    /**
     * 添加拦截器配置
     *
     * 该方法用于向应用程序添加拦截器，以在请求处理之前或之后执行特定逻辑
     * 在此处，我们添加了一个登录检查拦截器，以确保所有请求都经过登录验证，除了登录页面本身
     *
     * @param registry InterceptorRegistry实例，用于注册拦截器
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 调用父类方法以执行任何默认的拦截器配置
        WebMvcConfigurer.super.addInterceptors(registry);

        // 注册一个登录检查拦截器实例
        // 这个拦截器将对所有请求路径生效，但登录请求除外
        registry.addInterceptor(new SelectcourseCheckinterceptor())
                .addPathPatterns("/student/deleteCourse","student/confirmCourse","student/searchCourse");
    }
}
